home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
011
/
brutil.arc
/
KEYSCAN.ASM
< prev
next >
Wrap
Assembly Source File
|
1987-02-13
|
2KB
|
126 lines
CODE SEGMENT PARA PUBLIC
ASSUME CS:CODE,DS:CODE,ES:CODE
ORG 100H
START PROC NEAR
JMP SHORT INIT
BUFFER DB 100 DUP(0)
BUFEND LABEL BYTE
BUFLEN EQU OFFSET(BUFEND-BUFFER)
BUFPTR1 DW 0
BUFPTR2 DW 0
INIT: MOV SI,36
MOV DI,OFFSET OLDINT
MOV AX,0
MOV DS,AX
MOVSW
MOVSW
PUSH DS
PUSH ES
POP DS
POP ES
MOV DI,36
CLI
MOV AX,OFFSET KBINT
STOSW
MOV AX,CS
STOSW
STI
PUSH DS
POP ES
MOV AH,9
MOV DX,OFFSET EXTMSG
INT 21H
REPEAT: CALL KBGET
CMP AL,1
JNZ REPEAT
CALL KBGET
CMP AL,1
JNZ REPEAT
REPEAT2: CALL KBGET
CMP AL,81H
JNZ REPEAT2
MOV SI,OFFSET OLDINT
MOV DI,36
MOV AX,0
MOV ES,AX
CLI
MOVSW
MOVSW
STI
PUSH DS
POP ES
RET
OLDINT DD 0
EXTMSG: DB 'Hold down ESC key to end program',13,10,'$'
KBGET: CLI
MOV BX,BUFPTR1
CMP BX,BUFPTR2
JNZ KBGET2
STI
JMP KBGET
KBGET2: MOV AL,[BUFFER+BX]
INC BX
CMP BX,BUFLEN
JC KBGET3
SUB BX,BX
KBGET3: MOV BUFPTR1,BX
STI
PUSH AX
MOV CL,4
SHR AL,CL
CALL HEX1
POP AX
PUSH AX
AND AL,15
CALL HEX1
POP AX
CRLF: PUSH AX
MOV DL,13
CALL HEX2
POP AX
RET
HEX1: ADD AL,90H
DAA
ADC AL,40H
DAA
MOV DL,AL
HEX2: MOV AH,2
INT 21H
RET
ASSUME DS:NOTHING
KBINT: PUSH BX
PUSH AX
IN AL,60H
PUSH AX
IN AL,61H
OR AL,80H
OUT 61H,AL
AND AL,7FH
OUT 61H,AL
POP AX
MOV BX,BUFPTR2
MOV [BUFFER+BX],AL
INC BX
CMP BX,BUFLEN
JC KBINT3
SUB BX,BX
KBINT3: CMP BX,BUFPTR1
JZ KBINT2
MOV BUFPTR2,BX
KBINT2: MOV AL,20H
OUT 20H,AL
POP AX
POP BX
IRET
START ENDP
CODE ENDS
END START
R1
JZ KBINT2
MOV BUFPTR2,BX
KBINT2: MOV AL,20H
OUT 20H,AL
POP AX
POP BX
IRET
START